#include "Stack.h"
#include <iostream>
using namespace std;

//栈的初始化  栈顶指针指向0位置 栈顶指针始终在栈顶元素的上一个位置
//时间复杂度为  O(n)
bool InitSqStack(SqStack &S)
{
    S.data = new int[MAXSIZE];
    if(S.data==nullptr)
        return false;
    S.top = 0;
    return true;
}

//出栈操作实现
//时间复杂度为  O(1)
int Pop(SqStack &S)
{
    if(S.top == 0)
        return false;
    return S.data[--S.top];
}

//入栈操作实现
//时间复杂度为  O(1)
int Push(SqStack &S, int a)
{
    if(S.top == MAXSIZE)
    {
        cout << "栈满" << endl;
        return false;
    }

    S.data[S.top++] = a;
    return 0;
}

//判断栈空
//时间复杂度为  O(1)
bool SqStackEmpty(SqStack S)
{
    if(S.top == 0)
        return true;
    return false;
}

//读栈顶元素但是不出栈
//时间复杂度为  O(1)
int getTop(SqStack S)
{
    if(S.top==0)
    {
        cout << "栈内无元素" <<endl;
        return 0;
    }

    return S.data[S.top];
}

//销毁顺序栈
//时间复杂度为  O(n)
bool DestorySqStack(SqStack &S)
{
    delete[] S.data;
    S.top = -1;
    S.data = nullptr;
    if(S.data != nullptr)
        return false;
    cout << "销毁成功" << endl;
    return true;
}

void printStack(SqStack S)
{
    int ptr = --S.top;
    int i = 1;
    while (ptr != -1)
    {
        cout << "这是栈内第 "<< i <<"个元素"<<S.data[ptr]<<endl;
        ptr--;
        i++;
    }
    

}

